package com.quan.upms.rpc.api;

import java.util.List;

import com.quan.common.core.support.IService;
import com.quan.upms.rpc.extend.UpmsUserDto;
import com.quan.upms.rpc.model.UpmsGroup;
import com.quan.upms.rpc.model.UpmsPermission;
import com.quan.upms.rpc.model.UpmsRole;
import com.quan.upms.rpc.model.UpmsUser;
import com.quan.upms.rpc.model.UpmsUserCompanyDeptAssign;
import com.quan.upms.rpc.model.UpmsUserGroupAssign;
import com.quan.upms.rpc.model.UpmsUserRoleAssign;

public interface UpmsUserService extends IService<UpmsUser> {

	
	/**
	 * 修改个人密码
	 * @param id
	 * @param oldPassword
	 * @param newPassword
	 */
	public void updatePassword(Integer id, String oldPassword, String newPassword) ;
	
	/**
	 * 根据账号检索用户（支持用户名、手机号、邮箱登录）
	 * @param account
	 * @return
	 */
	public UpmsUser getAccount(String account) ;
	
	/**
	 * 获取用户详情信息（部门，角色，组，权限）
	 * @param id
	 * @return
	 */
	public UpmsUser getUserDetail(Integer id) ;
	
	/**
	 * 批量重置用户密码
	 * @param ids
	 */
	public void batchResetPassword(Integer[] ids) ;
	
	/**
	 * 批量修改用户状态
	 * @param ids
	 * @param status
	 */
	public void batchUpdateStatus(Integer[] ids, Integer status) ;
	
	/**
	 * 记录用户登录的次数，IP，时间
	 * @param id
	 */
	public void loginRecord(Integer id, String lastLoginIp) ;
	
	/**
	 * 用户加入到组
	 * @param dto
	 */
	public void addUsersToGroupAssign(UpmsUserDto dto) ;
	
	/**
	 * 获取组用户
	 * @param groupId
	 * @return
	 */
	public List<UpmsUserGroupAssign> getUserGroupAssign(Integer groupId) ;
	
	/**
	 * 用户加入到组织机构
	 * @param dto
	 */
	public void addUsersToCompanyDeptAssign(UpmsUserDto dto) ;
	
	/**
	 * 获取公司用户
	 * @param companyId
	 * @return
	 */
	public List<UpmsUserCompanyDeptAssign> getUserCompanyAssign(Integer companyId) ;
	
	/**
	 * 获取部门用户
	 * @param organizationId
	 * @return
	 */
	public List<UpmsUserCompanyDeptAssign> getUserDeptAssign(Integer departmentId) ;
	
	
	/**
	 * 分配角色给用户
	 * @param dto
	 */
	public void addUsersToRoleAssign(UpmsUserDto dto) ;
	
	/**
	 * 获取角色用户
	 * @param roleId
	 * @return
	 */
	public List<UpmsUserRoleAssign> getUserRoleAssign(Integer roleId) ;

	/**
	 * 根据ID获取用户的群组
	 * @param id
	 * @return
	 */
	public List<UpmsGroup> getUserGroups(Integer id) ;
	
	/**
	 * 根据ID获取用户的角色
	 * @param id
	 * @return
	 */
	public List<UpmsRole> getUserRoles(Integer id) ;
	
	/**
	 * 根据ID获取用户的权限
	 * @param id
	 * @return
	 */
	public List<UpmsPermission> getUserPermission(Integer id) ;
	
}
